home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / FROMUTS / CDUNGEON / !CDUNGEON / c / SOBJS < prev    next >
Text File  |  1991-05-20  |  21KB  |  1,024 lines

  1. /* SOBJS-    SIMPLE OBJECTS PROCESSOR */
  2. /*     OBJECTS IN THIS MODULE CANNOT CALL RMINFO, JIGSUP, */
  3. /*     MAJOR VERBS, OR OTHER NON-RESIDENT SUBROUTINES */
  4.  
  5. /*COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142*/
  6. /* ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED */
  7. /* WRITTEN BY R. M. SUPNIK */
  8.  
  9. #include "funcs.h"
  10. #include "vars.h"
  11.  
  12. logical sobjs_(ri, arg)
  13. integer ri;
  14. integer arg;
  15. {
  16.     /* System generated locals */
  17.     integer i__1;
  18.     logical ret_val;
  19.  
  20.     /* Local variables */
  21.     logical f;
  22.     integer i;
  23.     integer mroom;
  24.     integer av;
  25.     integer odi2 = 0, odo2 = 0;
  26.  
  27.     if (prsvec_1.prso > 220) {
  28.     goto L5;
  29.     }
  30.     if (prsvec_1.prso != 0) {
  31.     odo2 = objcts_1.odesc2[prsvec_1.prso - 1];
  32.     }
  33. L5:
  34.     if (prsvec_1.prsi != 0) {
  35.     odi2 = objcts_1.odesc2[prsvec_1.prsi - 1];
  36.     }
  37.     av = advs_1.avehic[play_1.winner - 1];
  38.     ret_val = TRUE_;
  39.  
  40.     switch (ri) {
  41.     case 1:  goto L1000;
  42.     case 2:  goto L3000;
  43.     case 3:  goto L4000;
  44.     case 4:  goto L6000;
  45.     case 5:  goto L7000;
  46.     case 6:  goto L8000;
  47.     case 7:  goto L9000;
  48.     case 8:  goto L13000;
  49.     case 9:  goto L14000;
  50.     case 10:  goto L16000;
  51.     case 11:  goto L17000;
  52.     case 12:  goto L21000;
  53.     case 13:  goto L23000;
  54.     case 14:  goto L24000;
  55.     case 15:  goto L27000;
  56.     case 16:  goto L28000;
  57.     case 17:  goto L29000;
  58.     case 18:  goto L30000;
  59.     case 19:  goto L31000;
  60.     case 20:  goto L33000;
  61.     case 21:  goto L34000;
  62.     case 22:  goto L36000;
  63.     case 23:  goto L37000;
  64.     case 24:  goto L38000;
  65.     case 25:  goto L41000;
  66.     case 26:  goto L42000;
  67.     case 27:  goto L43000;
  68.     case 28:  goto L44000;
  69.     case 29:  goto L46000;
  70.     case 30:  goto L53000;
  71.     case 31:  goto L56000;
  72.     }
  73.     bug_(6, ri);
  74.  
  75. /* RETURN HERE TO DECLARE FALSE RESULT */
  76.  
  77. L10:
  78.     ret_val = FALSE_;
  79.     return ret_val;
  80. /* SOBJS, PAGE 3 */
  81.  
  82. /* O1--    GUNK FUNCTION */
  83.  
  84. L1000:
  85.     if (objcts_1.ocan[oindex_1.gunk - 1] == 0) {
  86.     goto L10;
  87.     }
  88. /*                         !NOT INSIDE? F */
  89.     newsta_(oindex_1.gunk, 122, 0, 0, 0);
  90. /*                         !FALLS APART. */
  91.     return ret_val;
  92.  
  93. /* O2--    TROPHY CASE */
  94.  
  95. L3000:
  96.     if (prsvec_1.prsa != vindex_1.takew) {
  97.     goto L10;
  98.     }
  99. /*                         !TAKE? */
  100.     rspeak_(128);
  101. /*                         !CANT. */
  102.     return ret_val;
  103.  
  104. /* O3--    BOTTLE FUNCTION */
  105.  
  106. L4000:
  107.     if (prsvec_1.prsa != vindex_1.throww) {
  108.     goto L4100;
  109.     }
  110. /*                         !THROW? */
  111.     newsta_(prsvec_1.prso, 129, 0, 0, 0);
  112. /*                         !BREAKS. */
  113.     return ret_val;
  114.  
  115. L4100:
  116.     if (prsvec_1.prsa != vindex_1.mungw) {
  117.     goto L10;
  118.     }
  119. /*                         !MUNG? */
  120.     newsta_(prsvec_1.prso, 131, 0, 0, 0);
  121. /*                         !BREAKS. */
  122.     return ret_val;
  123. /* SOBJS, PAGE 4 */
  124.  
  125. /* O4--    ROPE FUNCTION */
  126.  
  127. L6000:
  128.     if (play_1.here == rindex_1.dome) {
  129.     goto L6100;
  130.     }
  131. /*                         !IN DOME? */
  132.     findex_1.domef = FALSE_;
  133. /*                         !NO, */
  134.     if (prsvec_1.prsa != vindex_1.untiew) {
  135.     goto L6050;
  136.     }
  137. /*                         !UNTIE? */
  138.     rspeak_(134);
  139. /*                         !CANT */
  140.     return ret_val;
  141.  
  142. L6050:
  143.     if (prsvec_1.prsa != vindex_1.tiew) {
  144.     goto L10;
  145.     }
  146. /*                         !TIE? */
  147.     rspeak_(135);
  148. /*                         !CANT TIE */
  149.     return ret_val;
  150.  
  151. L6100:
  152.     if (prsvec_1.prsa != vindex_1.tiew || prsvec_1.prsi != oindex_1.raili) {
  153.     goto L6200;
  154.     }
  155.     if (findex_1.domef) {
  156.     goto L6150;
  157.     }
  158. /*                         !ALREADY TIED? */
  159.     findex_1.domef = TRUE_;
  160. /*                         !NO, TIE IT. */
  161.     objcts_1.oflag1[oindex_1.rope - 1] |= NDSCBT;
  162.     objcts_1.oflag2[oindex_1.rope - 1] |= CLMBBT;
  163.     newsta_(oindex_1.rope, 137, rindex_1.dome, 0, 0);
  164.     return ret_val;
  165.  
  166. L6150:
  167.     rspeak_(136);
  168. /*                         !DUMMY. */
  169.     return ret_val;
  170.  
  171. L6200:
  172.     if (prsvec_1.prsa != vindex_1.untiew) {
  173.     goto L6300;
  174.     }
  175. /*                         !UNTIE? */
  176.     if (findex_1.domef) {
  177.     goto L6250;
  178.     }
  179. /*                         !TIED? */
  180.     rspeak_(134);
  181. /*                         !NO, DUMMY. */
  182.     return ret_val;
  183.  
  184. L6250:
  185.     findex_1.domef = FALSE_;
  186. /*                         !YES, UNTIE IT. */
  187.     objcts_1.oflag1[oindex_1.rope - 1] &= ~ NDSCBT;
  188.     objcts_1.oflag2[oindex_1.rope - 1] &= ~ CLMBBT;
  189.     rspeak_(139);
  190.     return ret_val;
  191.  
  192. L6300:
  193.     if (findex_1.domef || prsvec_1.prsa != vindex_1.dropw) {
  194.     goto L6400;
  195.     }
  196. /*                         !DROP & UNTIED? */
  197.     newsta_(oindex_1.rope, 140, rindex_1.mtorc, 0, 0);
  198. /*                         !YES, DROP. */
  199.     return ret_val;
  200.  
  201. L6400:
  202.     if (prsvec_1.prsa != vindex_1.takew || ! findex_1.domef) {
  203.     goto L10;
  204.     }
  205.     rspeak_(141);
  206. /*                         !TAKE & TIED. */
  207.     return ret_val;
  208.  
  209. /* O5--    SWORD FUNCTION */
  210.  
  211. L7000:
  212.     if (prsvec_1.prsa == vindex_1.takew && play_1.winner == aindex_1.player) {
  213.  
  214.     hack_1.swdact = TRUE_;
  215.     }
  216.     goto L10;
  217.  
  218. /* O6--    LANTERN */
  219.  
  220. L8000:
  221.     if (prsvec_1.prsa != vindex_1.throww) {
  222.     goto L8100;
  223.     }
  224. /*                         !THROW? */
  225.     newsta_(oindex_1.lamp, 0, 0, 0, 0);
  226. /*                         !KILL LAMP, */
  227.     newsta_(oindex_1.blamp, 142, play_1.here, 0, 0);
  228. /*                         !REPLACE WITH BROKEN. */
  229.     return ret_val;
  230.  
  231. L8100:
  232.     if (prsvec_1.prsa == vindex_1.trnonw) {
  233.     cevent_1.cflag[cindex_1.cevlnt - 1] = TRUE_;
  234.     }
  235.     if (prsvec_1.prsa == vindex_1.trnofw) {
  236.     cevent_1.cflag[cindex_1.cevlnt - 1] = FALSE_;
  237.     }
  238.     goto L10;
  239.  
  240. /* O7--    RUG FUNCTION */
  241.  
  242. L9000:
  243.     if (prsvec_1.prsa != vindex_1.raisew) {
  244.     goto L9100;
  245.     }
  246. /*                         !RAISE? */
  247.     rspeak_(143);
  248. /*                         !CANT */
  249.     return ret_val;
  250.  
  251. L9100:
  252.     if (prsvec_1.prsa != vindex_1.takew) {
  253.     goto L9200;
  254.     }
  255. /*                         !TAKE? */
  256.     rspeak_(144);
  257. /*                         !CANT */
  258.     return ret_val;
  259.  
  260. L9200:
  261.     if (prsvec_1.prsa != vindex_1.movew) {
  262.     goto L9300;
  263.     }
  264. /*                         !MOVE? */
  265.     i__1 = findex_1.orrug + 145;
  266.     rspeak_(i__1);
  267.     findex_1.orrug = 1;
  268.     objcts_1.oflag1[oindex_1.door - 1] |= VISIBT;
  269.     return ret_val;
  270.  
  271. L9300:
  272.     if (prsvec_1.prsa != vindex_1.lookuw || findex_1.orrug != 0 || (
  273.         objcts_1.oflag2[oindex_1.door - 1] & OPENBT) != 0) {
  274.     goto L10;
  275.     }
  276.     rspeak_(345);
  277.     return ret_val;
  278. /* SOBJS, PAGE 5 */
  279.  
  280. /* O8--    SKELETON */
  281.  
  282. L13000:
  283.     i = robrm_(play_1.here, 100, rindex_1.lld2, 0, 0) + robadv_(
  284.         play_1.winner, rindex_1.lld2, 0, 0);
  285.     if (i != 0) {
  286.     rspeak_(162);
  287.     }
  288. /*                         !IF ROBBED, SAY SO. */
  289.     return ret_val;
  290.  
  291. /* O9--    MIRROR */
  292.  
  293. L14000:
  294.     if (findex_1.mirrmf || prsvec_1.prsa != vindex_1.rubw) {
  295.     goto L14500;
  296.     }
  297.     mroom = play_1.here ^ 1;
  298.     i__1 = objcts_1.olnt;
  299.     for (i = 1; i <= i__1; ++i) {
  300. /*                         !INTERCHANGE OBJS. */
  301.     if (objcts_1.oroom[i - 1] == play_1.here) {
  302.         objcts_1.oroom[i - 1] = -1;
  303.     }
  304.     if (objcts_1.oroom[i - 1] == mroom) {
  305.         objcts_1.oroom[i - 1] = play_1.here;
  306.     }
  307.     if (objcts_1.oroom[i - 1] == -1) {
  308.         objcts_1.oroom[i - 1] = mroom;
  309.     }
  310. /* L14100: */
  311.     }
  312.     f = moveto_(mroom, play_1.winner);
  313.     rspeak_(163);
  314. /*                         !SHAKE WORLD. */
  315.     return ret_val;
  316.  
  317. L14500:
  318.     if (prsvec_1.prsa != vindex_1.lookw && prsvec_1.prsa != vindex_1.lookiw &&
  319.          prsvec_1.prsa != vindex_1.examiw) {
  320.     goto L14600;
  321.     }
  322.     i = 164;
  323. /*                         !MIRROR OK. */
  324.     if (findex_1.mirrmf) {
  325.     i = 165;
  326.     }
  327. /*                         !MIRROR DEAD. */
  328.     rspeak_(i);
  329.     return ret_val;
  330.  
  331. L14600:
  332.     if (prsvec_1.prsa != vindex_1.takew) {
  333.     goto L14700;
  334.     }
  335. /*                         !TAKE? */
  336.     rspeak_(166);
  337. /*                         !JOKE. */
  338.     return ret_val;
  339.  
  340. L14700:
  341.     if (prsvec_1.prsa != vindex_1.mungw && prsvec_1.prsa != vindex_1.throww) {
  342.  
  343.     goto L10;
  344.     }
  345.     i = 167;
  346. /*                         !MIRROR BREAKS. */
  347.     if (findex_1.mirrmf) {
  348.     i = 168;
  349.     }
  350. /*                         !MIRROR ALREADY BROKEN. */
  351.     findex_1.mirrmf = TRUE_;
  352.     findex_1.badlkf = TRUE_;
  353.     rspeak_(i);
  354.     return ret_val;
  355. /* SOBJS, PAGE 6 */
  356.  
  357. /* O10--    DUMBWAITER */
  358.  
  359. L16000:
  360.     if (prsvec_1.prsa != vindex_1.raisew) {
  361.     goto L16100;
  362.     }
  363. /*                         !RAISE? */
  364.     if (findex_1.cagetf) {
  365.     goto L16400;
  366.     }
  367. /*                         !ALREADY AT TOP? */
  368.     newsta_(oindex_1.tbask, 175, rindex_1.tshaf, 0, 0);
  369. /*                         !NO, RAISE BASKET. */
  370.     newsta_(oindex_1.fbask, 0, rindex_1.bshaf, 0, 0);
  371.     findex_1.cagetf = TRUE_;
  372. /*                         !AT TOP. */
  373.     return ret_val;
  374.  
  375. L16100:
  376.     if (prsvec_1.prsa != vindex_1.lowerw) {
  377.     goto L16200;
  378.     }
  379. /*                         !LOWER? */
  380.     if (! findex_1.cagetf) {
  381.     goto L16400;
  382.     }
  383. /*                         !ALREADY AT BOTTOM? */
  384.     newsta_(oindex_1.tbask, 176, rindex_1.bshaf, 0, 0);
  385. /*                         !NO, LOWER BASKET. */
  386.     newsta_(oindex_1.fbask, 0, rindex_1.tshaf, 0, 0);
  387.     findex_1.cagetf = FALSE_;
  388.     if (! lit_(play_1.here)) {
  389.     rspeak_(406);
  390.     }
  391. /*                         !IF DARK, DIE. */
  392.     return ret_val;
  393.  
  394. L16200:
  395.     if (prsvec_1.prso != oindex_1.fbask && prsvec_1.prsi != oindex_1.fbask) {
  396.     goto L16300;
  397.     }
  398.     rspeak_(130);
  399. /*                         !WRONG BASKET. */
  400.     return ret_val;
  401.  
  402. L16300:
  403.     if (prsvec_1.prsa != vindex_1.takew) {
  404.     goto L10;
  405.     }
  406. /*                         !TAKE? */
  407.     rspeak_(177);
  408. /*                         !JOKE. */
  409.     return ret_val;
  410.  
  411. L16400:
  412.     i__1 = rnd_(3) + 125;
  413.     rspeak_(i__1);
  414. /*                         !DUMMY. */
  415.     return ret_val;
  416.  
  417. /* O11--    GHOST FUNCTION */
  418.  
  419. L17000:
  420.     i = 178;
  421. /*                         !ASSUME DIRECT. */
  422.     if (prsvec_1.prso != oindex_1.ghost) {
  423.     i = 179;
  424.     }
  425. /*                         !IF NOT, INDIRECT. */
  426.     rspeak_(i);
  427.     return ret_val;
  428. /*                         !SPEAK AND EXIT. */
  429. /* SOBJS, PAGE 7 */
  430.  
  431. /* O12--    TUBE */
  432.  
  433. L21000:
  434.     if (prsvec_1.prsa != vindex_1.putw || prsvec_1.prsi != oindex_1.tube) {
  435.     goto L10;
  436.     }
  437.     rspeak_(186);
  438. /*                         !CANT PUT BACK IN. */
  439.     return ret_val;
  440.  
  441. /* O13--    CHALICE */
  442.  
  443. L23000:
  444.     if (prsvec_1.prsa != vindex_1.takew || objcts_1.ocan[prsvec_1.prso - 1] !=
  445.          0 || objcts_1.oroom[prsvec_1.prso - 1] != rindex_1.treas || 
  446.         objcts_1.oroom[oindex_1.thief - 1] != rindex_1.treas || (
  447.         objcts_1.oflag2[oindex_1.thief - 1] & FITEBT) == 0 || ! 
  448.         hack_1.thfact) {
  449.     goto L10;
  450.     }
  451.     rspeak_(204);
  452. /*                         !CANT TAKE. */
  453.     return ret_val;
  454.  
  455. /* O14--    PAINTING */
  456.  
  457. L24000:
  458.     if (prsvec_1.prsa != vindex_1.mungw) {
  459.     goto L10;
  460.     }
  461. /*                         !MUNG? */
  462.     rspeak_(205);
  463. /*                         !DESTROY PAINTING. */
  464.     objcts_1.ofval[prsvec_1.prso - 1] = 0;
  465.     objcts_1.otval[prsvec_1.prso - 1] = 0;
  466.     objcts_1.odesc1[prsvec_1.prso - 1] = 207;
  467.     objcts_1.odesc2[prsvec_1.prso - 1] = 206;
  468.     return ret_val;
  469. /* SOBJS, PAGE 8 */
  470.  
  471. /* O15--    BOLT */
  472.  
  473. L27000:
  474.     if (prsvec_1.prsa != vindex_1.turnw) {
  475.     goto L10;
  476.     }
  477. /*                         !TURN BOLT? */
  478.     if (prsvec_1.prsi != oindex_1.wrenc) {
  479.     goto L27500;
  480.     }
  481. /*                         !WITH WRENCH? */
  482.     if (findex_1.gatef) {
  483.     goto L27100;
  484.     }
  485. /*                         !PROPER BUTTON PUSHED? */
  486.     rspeak_(210);
  487. /*                         !NO, LOSE. */
  488.     return ret_val;
  489.  
  490. L27100:
  491.     if (findex_1.lwtidf) {
  492.     goto L27200;
  493.     }
  494. /*                         !LOW TIDE NOW? */
  495.     findex_1.lwtidf = TRUE_;
  496. /*                         !NO, EMPTY DAM. */
  497.     rspeak_(211);
  498.     objcts_1.oflag2[oindex_1.coffi - 1] &= ~ SCRDBT;
  499.     objcts_1.oflag1[oindex_1.trunk - 1] |= VISIBT;
  500.     rooms_1.rflag[rindex_1.reser - 1] = (rooms_1.rflag[rindex_1.reser - 1] | 
  501.         RLAND) & ~ (RWATER + RSEEN);
  502.     return ret_val;
  503.  
  504. L27200:
  505.     findex_1.lwtidf = FALSE_;
  506. /*                         !YES, FILL DAM. */
  507.     rspeak_(212);
  508.     if (qhere_(oindex_1.trunk, rindex_1.reser)) {
  509.     objcts_1.oflag1[oindex_1.trunk - 1] &= ~ VISIBT;
  510.     }
  511.     rooms_1.rflag[rindex_1.reser - 1] = (rooms_1.rflag[rindex_1.reser - 1] | 
  512.         RWATER) & ~ RLAND;
  513.     return ret_val;
  514.  
  515. L27500:
  516.     rspsub_(299, odi2);
  517. /*                         !NOT WITH THAT. */
  518.     return ret_val;
  519.  
  520. /* O16--    GRATING */
  521.  
  522. L28000:
  523.     if (prsvec_1.prsa != vindex_1.openw && prsvec_1.prsa != vindex_1.closew) {
  524.  
  525.     goto L10;
  526.     }
  527.     if (findex_1.grunlf) {
  528.     goto L28200;
  529.     }
  530. /*                         !UNLOCKED? */
  531.     rspeak_(214);
  532. /*                         !NO, LOCKED. */
  533.     return ret_val;
  534.  
  535. L28200:
  536.     i = 215;
  537. /*                         !UNLOCKED, VIEW FRM CLR. */
  538.     if (play_1.here != rindex_1.clear) {
  539.     i = 216;
  540.     }
  541. /*                         !VIEW FROM BELOW. */
  542.     ret_val = opncls_(oindex_1.grate, i, 885);
  543. /*                         !OPEN/CLOSE. */
  544.     rooms_1.rflag[rindex_1.mgrat - 1] &= ~ RLIGHT;
  545.     if ((objcts_1.oflag2[oindex_1.grate - 1] & OPENBT) != 0) {
  546.     rooms_1.rflag[rindex_1.mgrat - 1] |= RLIGHT;
  547.     }
  548.     if (! lit_(play_1.here)) {
  549.     rspeak_(406);
  550.     }
  551. /*                         !IF DARK, DIE. */
  552.     return ret_val;
  553.  
  554. /* O17--    TRAP DOOR */
  555.  
  556. L29000:
  557.     if (play_1.here != rindex_1.lroom) {
  558.     goto L29100;
  559.     }
  560. /*                         !FROM LIVING ROOM? */
  561.     ret_val = opncls_(oindex_1.door, 218, 219);
  562. /*                         !OPEN/CLOSE. */
  563.     return ret_val;
  564.  
  565. L29100:
  566.     if (play_1.here != rindex_1.cella) {
  567.     goto L10;
  568.     }
  569. /*                         !FROM CELLAR? */
  570.     if (prsvec_1.prsa != vindex_1.openw || (objcts_1.oflag2[oindex_1.door - 1]
  571.          & OPENBT) != 0) {
  572.     goto L29200;
  573.     }
  574.     rspeak_(220);
  575. /*                         !CANT OPEN CLOSED DOOR. */
  576.     return ret_val;
  577.  
  578. L29200:
  579.     ret_val = opncls_(oindex_1.door, 0, 22);
  580. /*                         !NORMAL OPEN/CLOSE. */
  581.     return ret_val;
  582.  
  583. /* O18--    DURABLE DOOR */
  584.  
  585. L30000:
  586.     i = 0;
  587. /*                         !ASSUME NO APPL. */
  588.     if (prsvec_1.prsa == vindex_1.openw) {
  589.     i = 221;
  590.     }
  591. /*                         !OPEN? */
  592.     if (prsvec_1.prsa == vindex_1.burnw) {
  593.     i = 222;
  594.     }
  595. /*                         !BURN? */
  596.     if (prsvec_1.prsa == vindex_1.mungw) {
  597.     i = rnd_(3) + 223;
  598.     }
  599. /*                         !MUNG? */
  600.     if (i == 0) {
  601.     goto L10;
  602.     }
  603.     rspeak_(i);
  604.     return ret_val;
  605.  
  606. /* O19--    MASTER SWITCH */
  607.  
  608. L31000:
  609.     if (prsvec_1.prsa != vindex_1.turnw) {
  610.     goto L10;
  611.     }
  612. /*                         !TURN? */
  613.     if (prsvec_1.prsi != oindex_1.screw) {
  614.     goto L31500;
  615.     }
  616. /*                         !WITH SCREWDRIVER? */
  617.     if ((objcts_1.oflag2[oindex_1.machi - 1] & OPENBT) != 0) {
  618.     goto L31600;
  619.     }
  620. /*                         !LID UP? */
  621.     rspeak_(226);
  622. /*                         !NO, ACTIVATE. */
  623.     if (objcts_1.ocan[oindex_1.coal - 1] != oindex_1.machi) {
  624.     goto L31400;
  625.     }
  626. /*                         !COAL INSIDE? */
  627.     newsta_(oindex_1.coal, 0, 0, 0, 0);
  628. /*                         !KILL COAL, */
  629.     newsta_(oindex_1.diamo, 0, 0, oindex_1.machi, 0);
  630. /*                         !REPLACE WITH DIAMOND. */
  631.     return ret_val;
  632.  
  633. L31400:
  634.     i__1 = objcts_1.olnt;
  635.     for (i = 1; i <= i__1; ++i) {
  636. /*                         !KILL NONCOAL OBJECTS. */
  637.     if (objcts_1.ocan[i - 1] != oindex_1.machi) {
  638.         goto L31450;
  639.     }
  640. /*                         !INSIDE MACHINE? */
  641.     newsta_(i, 0, 0, 0, 0);
  642. /*                         !KILL OBJECT AND CONTENTS. */
  643.     newsta_(oindex_1.gunk, 0, 0, oindex_1.machi, 0);
  644. /*                         !REDUCE TO GUNK. */
  645. L31450:
  646.     ;
  647.     }
  648.     return ret_val;
  649.  
  650. L31500:
  651.     rspsub_(300, odi2);
  652. /*                         !CANT TURN WITH THAT. */
  653.     return ret_val;
  654.  
  655. L31600:
  656.     rspeak_(227);
  657. /*                         !LID IS UP. */
  658.     return ret_val;
  659. /* SOBJS, PAGE 9 */
  660.  
  661. /* O20--    LEAK */
  662.  
  663. L33000:
  664.     if (prsvec_1.prso != oindex_1.leak || prsvec_1.prsa != vindex_1.plugw || 
  665.         findex_1.rvmnt <= 0) {
  666.     goto L10;
  667.     }
  668.     if (prsvec_1.prsi != oindex_1.putty) {
  669.     goto L33100;
  670.     }
  671. /*                         !WITH PUTTY? */
  672.     findex_1.rvmnt = -1;
  673. /*                         !DISABLE LEAK. */
  674.     cevent_1.ctick[cindex_1.cevmnt - 1] = 0;
  675.     rspeak_(577);
  676.     return ret_val;
  677.  
  678. L33100:
  679.     rspsub_(301, odi2);
  680. /*                         !CANT WITH THAT. */
  681.     return ret_val;
  682.  
  683. /* O21--    DROWNING BUTTONS */
  684.  
  685. L34000:
  686.     if (prsvec_1.prsa != vindex_1.pushw) {
  687.     goto L10;
  688.     }
  689. /*                         !PUSH? */
  690.     switch (prsvec_1.prso - oindex_1.rbutt + 1) {
  691.     case 1:  goto L34100;
  692.     case 2:  goto L34200;
  693.     case 3:  goto L34300;
  694.     case 4:  goto L34400;
  695.     }
  696.     goto L10;
  697. /*                         !NOT A BUTTON. */
  698.  
  699. L34100:
  700.     rooms_1.rflag[play_1.here - 1] ^= RLIGHT;
  701.     i = 230;
  702.     if ((rooms_1.rflag[play_1.here - 1] & RLIGHT) != 0) {
  703.     i = 231;
  704.     }
  705.     rspeak_(i);
  706.     return ret_val;
  707.  
  708. L34200:
  709.     findex_1.gatef = TRUE_;
  710. /*                         !RELEASE GATE. */
  711.     rspeak_(232);
  712.     return ret_val;
  713.  
  714. L34300:
  715.     findex_1.gatef = FALSE_;
  716. /*                         !INTERLOCK GATE. */
  717.     rspeak_(232);
  718.     return ret_val;
  719.  
  720. L34400:
  721.     if (findex_1.rvmnt != 0) {
  722.     goto L34500;
  723.     }
  724. /*                         !LEAK ALREADY STARTED? */
  725.     rspeak_(233);
  726. /*                         !NO, START LEAK. */
  727.     findex_1.rvmnt = 1;
  728.     cevent_1.ctick[cindex_1.cevmnt - 1] = -1;
  729.     return ret_val;
  730.  
  731. L34500:
  732.     rspeak_(234);
  733. /*                         !BUTTON JAMMED. */
  734.     return ret_val;
  735.  
  736. /* O22--    INFLATABLE BOAT */
  737.  
  738. L36000:
  739.     if (prsvec_1.prsa != vindex_1.inflaw) {
  740.     goto L10;
  741.     }
  742. /*                         !INFLATE? */
  743.     if (objcts_1.oroom[oindex_1.iboat - 1] != 0) {
  744.     goto L36100;
  745.     }
  746. /*                         !IN ROOM? */
  747.     rspeak_(235);
  748. /*                         !NO, JOKE. */
  749.     return ret_val;
  750.  
  751. L36100:
  752.     if (prsvec_1.prsi != oindex_1.pump) {
  753.     goto L36200;
  754.     }
  755. /*                         !WITH PUMP? */
  756.     newsta_(oindex_1.iboat, 0, 0, 0, 0);
  757. /*                         !KILL DEFL BOAT, */
  758.     newsta_(oindex_1.rboat, 236, play_1.here, 0, 0);
  759. /*                         !REPL WITH INF. */
  760.     findex_1.deflaf = FALSE_;
  761.     return ret_val;
  762.  
  763. L36200:
  764.     i = 237;
  765. /*                         !JOKES. */
  766.     if (prsvec_1.prsi != oindex_1.lungs) {
  767.     i = 303;
  768.     }
  769.     rspsub_(i, odi2);
  770.     return ret_val;
  771.  
  772. /* O23--    DEFLATED BOAT */
  773.  
  774. L37000:
  775.     if (prsvec_1.prsa != vindex_1.inflaw) {
  776.     goto L37100;
  777.     }
  778. /*                         !INFLATE? */
  779.     rspeak_(238);
  780. /*                         !JOKE. */
  781.     return ret_val;
  782.  
  783. L37100:
  784.     if (prsvec_1.prsa != vindex_1.plugw) {
  785.     goto L10;
  786.     }
  787. /*                         !PLUG? */
  788.     if (prsvec_1.prsi != oindex_1.putty) {
  789.     goto L33100;
  790.     }
  791. /*                         !WITH PUTTY? */
  792.     newsta_(oindex_1.iboat, 239, objcts_1.oroom[oindex_1.dboat - 1], 
  793.         objcts_1.ocan[oindex_1.dboat - 1], objcts_1.oadv[oindex_1.dboat 
  794.         - 1]);
  795.     newsta_(oindex_1.dboat, 0, 0, 0, 0);
  796. /*                         !KILL DEFL BOAT, REPL. */
  797.     return ret_val;
  798. /* SOBJS, PAGE 10 */
  799.  
  800. /* O24--    RUBBER BOAT */
  801.  
  802. L38000:
  803.     if (arg != 0) {
  804.     goto L10;
  805.     }
  806. /*                         !DISMISS READIN, OUT. */
  807.     if (prsvec_1.prsa != vindex_1.boardw || objcts_1.oadv[oindex_1.stick - 1] 
  808.         != play_1.winner) {
  809.     goto L38100;
  810.     }
  811.     newsta_(oindex_1.rboat, 0, 0, 0, 0);
  812. /*                         !KILL INFL BOAT, */
  813.     newsta_(oindex_1.dboat, 240, play_1.here, 0, 0);
  814. /*                         !REPL WITH DEAD. */
  815.     findex_1.deflaf = TRUE_;
  816.     return ret_val;
  817.  
  818. L38100:
  819.     if (prsvec_1.prsa != vindex_1.inflaw) {
  820.     goto L38200;
  821.     }
  822. /*                         !INFLATE? */
  823.     rspeak_(367);
  824. /*                         !YES, JOKE. */
  825.     return ret_val;
  826.  
  827. L38200:
  828.     if (prsvec_1.prsa != vindex_1.deflaw) {
  829.     goto L10;
  830.     }
  831. /*                         !DEFLATE? */
  832.     if (av == oindex_1.rboat) {
  833.     goto L38300;
  834.     }
  835. /*                         !IN BOAT? */
  836.     if (objcts_1.oroom[oindex_1.rboat - 1] == 0) {
  837.     goto L38400;
  838.     }
  839. /*                         !ON GROUND? */
  840.     newsta_(oindex_1.rboat, 0, 0, 0, 0);
  841. /*                         !KILL INFL BOAT, */
  842.     newsta_(oindex_1.iboat, 241, play_1.here, 0, 0);
  843. /*                         !REPL WITH DEFL. */
  844.     findex_1.deflaf = TRUE_;
  845.     return ret_val;
  846.  
  847. L38300:
  848.     rspeak_(242);
  849. /*                         !IN BOAT. */
  850.     return ret_val;
  851.  
  852. L38400:
  853.     rspeak_(243);
  854. /*                         !NOT ON GROUND. */
  855.     return ret_val;
  856.  
  857. /* O25--    BRAIDED ROPE */
  858.  
  859. L41000:
  860.     if (prsvec_1.prsa != vindex_1.tiew || prsvec_1.prso != oindex_1.brope || 
  861.         prsvec_1.prsi != oindex_1.hook1 && prsvec_1.prsi != 
  862.         oindex_1.hook2) {
  863.     goto L41500;
  864.     }
  865.     findex_1.btief = prsvec_1.prsi;
  866. /*                         !RECORD LOCATION. */
  867.     cevent_1.cflag[cindex_1.cevbal - 1] = FALSE_;
  868. /*                         !STALL ASCENT. */
  869.     rspeak_(248);
  870.     return ret_val;
  871.  
  872. L41500:
  873.     if (prsvec_1.prsa != vindex_1.untiew || prsvec_1.prso != oindex_1.brope) {
  874.  
  875.     goto L10;
  876.     }
  877.     if (findex_1.btief != 0) {
  878.     goto L41600;
  879.     }
  880. /*                         !TIED UP? */
  881.     rspeak_(249);
  882. /*                         !NO, JOKE. */
  883.     return ret_val;
  884.  
  885. L41600:
  886.     rspeak_(250);
  887.     findex_1.btief = 0;
  888. /*                         !UNTIE. */
  889.     cevent_1.ctick[cindex_1.cevbal - 1] = 3;
  890. /*                         !RESTART CLOCK. */
  891.     cevent_1.cflag[cindex_1.cevbal - 1] = TRUE_;
  892.     return ret_val;
  893.  
  894. /* O26--    SAFE */
  895.  
  896. L42000:
  897.     i = 0;
  898. /*                         !ASSUME UNPROCESSED. */
  899.     if (prsvec_1.prsa == vindex_1.takew) {
  900.     i = 251;
  901.     }
  902. /*                         !TAKE? */
  903.     if (prsvec_1.prsa == vindex_1.openw && findex_1.safef) {
  904.     i = 253;
  905.     }
  906. /*                         !OPEN AFTER BLAST? */
  907.     if (prsvec_1.prsa == vindex_1.openw && ! findex_1.safef) {
  908.     i = 254;
  909.     }
  910. /*                         !OPEN BEFORE BLAST? */
  911.     if (prsvec_1.prsa == vindex_1.closew && findex_1.safef) {
  912.     i = 253;
  913.     }
  914. /*                         !CLOSE AFTER? */
  915.     if (prsvec_1.prsa == vindex_1.closew && ! findex_1.safef) {
  916.     i = 255;
  917.     }
  918.     if (i == 0) {
  919.     goto L10;
  920.     }
  921.     rspeak_(i);
  922.     return ret_val;
  923.  
  924. /* O27--    FUSE */
  925.  
  926. L43000:
  927.     if (prsvec_1.prsa != vindex_1.burnw) {
  928.     goto L10;
  929.     }
  930. /*                         !BURN? */
  931.     rspeak_(256);
  932.     cevent_1.ctick[cindex_1.cevfus - 1] = 2;
  933. /*                         !START COUNTDOWN. */
  934.     return ret_val;
  935.  
  936. /* O28--    GNOME */
  937.  
  938. L44000:
  939.     if (prsvec_1.prsa != vindex_1.givew && prsvec_1.prsa != vindex_1.throww) {
  940.  
  941.     goto L44500;
  942.     }
  943.     if (objcts_1.otval[prsvec_1.prso - 1] == 0) {
  944.     goto L44100;
  945.     }
  946. /*                         !TREASURE? */
  947.     rspsub_(257, odo2);
  948. /*                         !YES, GET DOOR. */
  949.     newsta_(prsvec_1.prso, 0, 0, 0, 0);
  950.     newsta_(oindex_1.gnome, 0, 0, 0, 0);
  951. /*                         !VANISH GNOME. */
  952.     findex_1.gnodrf = TRUE_;
  953.     return ret_val;
  954.  
  955. L44100:
  956.     rspsub_(258, odo2);
  957. /*                         !NO, LOSE OBJECT. */
  958.     newsta_(prsvec_1.prso, 0, 0, 0, 0);
  959.     return ret_val;
  960.  
  961. L44500:
  962.     rspeak_(259);
  963. /*                         !NERVOUS GNOME. */
  964.     if (! findex_1.gnomef) {
  965.     cevent_1.ctick[cindex_1.cevgno - 1] = 5;
  966.     }
  967. /*                         !SCHEDULE BYEBYE. */
  968.     findex_1.gnomef = TRUE_;
  969.     return ret_val;
  970.  
  971. /* O29--    COKE BOTTLES */
  972.  
  973. L46000:
  974.     if (prsvec_1.prsa != vindex_1.throww && prsvec_1.prsa != vindex_1.mungw) {
  975.  
  976.     goto L10;
  977.     }
  978.     newsta_(prsvec_1.prso, 262, 0, 0, 0);
  979. /*                         !MUNG BOTTLES. */
  980.     return ret_val;
  981. /* SOBJS, PAGE 11 */
  982.  
  983.  
  984. /* O30--    ROBOT */
  985.  
  986. L53000:
  987.     if (prsvec_1.prsa != vindex_1.givew) {
  988.     goto L53200;
  989.     }
  990. /*                         !GIVE? */
  991.     newsta_(prsvec_1.prso, 0, 0, 0, aindex_1.arobot);
  992. /*                         !PUT ON ROBOT. */
  993.     rspsub_(302, odo2);
  994.     return ret_val;
  995.  
  996. L53200:
  997.     if (prsvec_1.prsa != vindex_1.mungw && prsvec_1.prsa != vindex_1.throww) {
  998.  
  999.     goto L10;
  1000.     }
  1001.     newsta_(oindex_1.robot, 285, 0, 0, 0);
  1002. /*                         !KILL ROBOT. */
  1003.     return ret_val;
  1004.  
  1005. /* O31--    GRUE */
  1006.  
  1007. L56000:
  1008.     if (prsvec_1.prsa != vindex_1.examiw) {
  1009.     goto L56100;
  1010.     }
  1011. /*                         !EXAMINE? */
  1012.     rspeak_(288);
  1013.     return ret_val;
  1014.  
  1015. L56100:
  1016.     if (prsvec_1.prsa != vindex_1.findw) {
  1017.     goto L10;
  1018.     }
  1019. /*                         !FIND? */
  1020.     rspeak_(289);
  1021.     return ret_val;
  1022.  
  1023. } /* sobjs_ */
  1024.